1. Field
At least one embodiment of the present invention pertains to a virtual cache memory defined by tags to data blocks evicted from a buffer cache memory.
2. Background
Electrically operated machines, such as general-purpose and special-purpose computing devices (e.g., “computers”), data storage devices or systems, network servers, file servers, and Internet servers typically include computer processors and other devices (often operating under the control of a processor) that frequently need to store information in, or retrieve information from a computer memory.
For example, a data storage device, such as a network server, file server, or Internet server to store data for access by other entities, such as client devices, may include or provide access to various types of memory. The data storage device may include or provide access to a “storage subsystem” having a number of mass storage devices, such as disk drives, which may be in a disk array. The storage subsystem may be located locally or remotely from the data storage device. Reading data from the drives and writing data to the drives can be controlled by an operating system and use a random access memory (RAM) type “main memory”.
The processor(s) of the data storage device may have direct access to the main memory via an address and data bus connection or interface. As part of the main memory, the data storage device may include a cache memory known as buffer cache to store data that is frequently or recently used when reading data from the storage subsystem.
For example, a data storage device may be a server or storage server providing access to a storage subsystem, and having a main memory, and a cache memory to store and retrieve data on behalf of one or more client processing systems (clients). The cache memory may be used to provide quick read and write access to data frequently or recently used (e.g., access without reading the data from the storage subsystem). When data in the cache memory is going to be evicted (e.g., deleted, or written over), an additional cache memory or a “victim cache” memory may also exist in the main memory to store the data to be evicted, to continue to provide quick read and write access to the data. When the victim cache becomes full, data in the victim cache will also need to be evicted. Thus, access to data evicted from the victim cache will again require accessing the copy of that data in the storage subsystem. Since cache memory is typically more expensive than storage subsystem memory, it is desirable to ensure that cache memory size and algorithms for inserting, looking-up and evicting data from cache memory are optimal for peak performance.